#ifndef PUBLIC_H
#define PUBLIC_H

#include <iostream>
#include <string>
#include <vector>

// 本头文件定义 各种 Message对应调用的回调方法

// 1是登录，3是注册
enum{
   LOGIN_MSG = 1, //登录业务
   LOGIN_MSG_ACK, //登录后返回的确认应答
   LOGIN_OUT_MEG, //登出业务
   REG_MSG,       //注册业务
   REG_MSG_ACK,   //注册后返回的注册应答
   ONE_CHAT_MSG,  //点对点业务
   ADD_FERIEND_MSG, //添加朋友业务


   CREATE_GROUP_MSG,
   JOIN_GROUP_MSG,
   GROUP_CHAT_MSG,
   CHANGE_ROLE_MSG,
   CHANGE_ROLE_MSG_ACK
};

// std::string filterInvalidUTF8(const std::string& input) 
// {
//     std::string result;
//     std::string::const_iterator it = input.begin();
//     while (it != input.end()) {
//         unsigned char c = *it;
//         if ((c & 0x80) == 0) { // 单字节，有效（0xxxxxxx）
//             result += c;
//             ++it;
//         } else if ((c & 0xE0) == 0xC0) { // 双字节，检查后续一个字节
//             if (it + 1 != input.end() && (*(it + 1) & 0xC0) == 0x80) {
//                 result += *it;
//                 result += *(it + 1);
//                 it += 2;
//             } else {
//                 // 无效，跳过当前字节
//                 ++it;
//             }
//         } else if ((c & 0xF0) == 0xE0) { // 三字节，检查后续两个字节
//             if (it + 2 < input.end() && (*(it + 1) & 0xC0) == 0x80 && (*(it + 2) & 0xC0) == 0x80) {
//                 result += *it;
//                 result += *(it + 1);
//                 result += *(it + 2);
//                 it += 3;
//             } else {
//                 // 无效，跳过当前字节
//                 ++it;
//             }
//         } else if ((c & 0xF8) == 0xF0) { // 四字节，检查后续三个字节
//             if (it + 3 < input.end() && (*(it + 1) & 0xC0) == 0x80 && (*(it + 2) & 0xC0) == 0x80 && (*(it + 3) & 0xC0) == 0x80) {
//                 result += *it;
//                 result += *(it + 1);
//                 result += *(it + 2);
//                 result += *(it + 3);
//                 it += 4;
//             } else {
//                 // 无效，跳过当前字节
//                 ++it;
//             }
//         } else {
//             // 其他情况，视为无效，跳过当前字节
//             ++it;
//         }
//     }
//     return result;
// }   

#endif